package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/*调用有参方法*/
public class ReflectDemo5 {
    public static void main(String[] args) throws Exception {
        Person p =new Person();
        p.say("你好~");

        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();

        //say(String info)
        Method method =cls.getMethod("say",String.class);
        method.invoke(obj,"熊大");

        //say(String info,int count)
        Method method2 =cls.getMethod("say",String.class,int.class);
        method2.invoke(obj,"你好",3);

/*
        //调用方法
        //通过类对象获取指定名字的方法
        Method method = cls.getMethod("sayHello");
        //Method 提供了invoke方法用于调用方法，参数1为方法所属的对象
        method.invoke(obj);//obj.sayHello();



            通过类对象获取对应的构造器
            Constructor类，称为构造器对象，也是反射对象之一
            它的每一个实例用于表示某个类某的某个特定的构造器
        Constructor c = cls.getConstructor();//不传参数时获取的就是无参构造器
       Object obj = c.newInstance();//new Person();
        获取Person(String name)
        Constructor c = cls.getConstructor(String.class);
*/

    }
}
